package com.icoolkj.learn.juc.base.communication;

import com.icoolkj.learn.juc.base.utils.SleepTools;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.locks.LockSupport;

/**
 * @author icoolkj
 * @version 1.0
 * @description 等待/通知机制例子
 * @createDate 2025/03/05 12:46
 */
@Slf4j
public class LockSupportDemo {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            log.info("ParkThread start");
            // 当没有许可时，当前线程暂停运行，有了许可时，用掉这个许可，当前线程恢复运行
            LockSupport.park();
            log.info("ParkThread end");
        }, "t1");

        t1.start();

        SleepTools.second(2);

        log.info("awake ParkThread");
        // 给线程 t1 发放许可（多次连续调用 unpark 只会发一个许可）
        LockSupport.unpark(t1);

    }

}
